iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
自我挑戰組

電腦、網路大解密 系列 第 10

Day 10 - Ruby 進階

  • 分享至 

  • xImage
  •  

上次提到我們可以把數字、字串存在變數中,然後對變數做一些運算。但是當我們想對一大堆資料做事情時,不就要定義一大堆變數,取一大堆變數名稱?如果我要重複做一件事情,是要把同一段程式碼打很多遍嗎?以下簡介 Ruby 的進階語法概念,這些功能能幫助我們寫出更複雜的程式碼,當然也就能做出更豐富功能的程式。

陣列

使用陣列可以把多個資料放在一起,方便對資料們做相同的事情,通常會搭配迴圈一起操作。

# 產生存 7 個顏色字串的陣列
colors = ["red", "orange", "yellow", "green", "blue", "indigo", "purple"]

# 產生有 3 個位置的空陣列,再設定城市名稱
cities = Array.new(3)
cities[2] = "Taipei"
cities[1] = "Taichung"
cities[2] = "Kaohsiung"

# 印出第 0 個城市 (Taipei)
puts cities[0]

# 印出 7 個顏色
colors.each do |c|
  puts c
end

Hash

和陣列一樣可以存一堆資料的集合,但每個資料都要有不重複的名字(key),對應到一個值(value)

# 設定 3 個人的年齡
ages = {:Jack => 10, :"Jason"=> 12, :"Jerry"=> 18}
# 取出 Jack 的年齡
puts ages[:Jack]

# 印出人名(key)和年齡(age)
ages.each do |name, age|
  puts "#{name} is #{age} years old"
end

Function

把將一些程式邏輯放到 function,就不用每次都打一樣的程式碼,直接呼叫 function 就好。

# 先定義 function
def self_introduction(name, age, city)
	puts "My name is #{name}. I am #{age} years old. I live in #{city}"
end

# 呼叫 function
self_introduction("Jack", 11, "Taipei")
# 印出 Jack 的自我介紹
self_introduction("Jason", 15, "Taichung")
# 印出 Jason 的自我介紹

Class

Ruby中每樣東西都是物件。要定義一個物件,我們會想要知道它包含了哪些資料,以及它能做什麼事情。Class 就是物件的藍圖,定義了物件的狀態和行為。

# 定義 class
class Dog
	# 定義資料: 狗的名字
	def initialize(name)
    @name = name
  end

	# 定義行為: 跑
  def run()
    puts "#{@name} runs"
  end

	# 定義行為: 吃
	def eat(food)
    puts "#{@name} eats #{food}"
  end
end

# 用藍圖做出一個物件
dog = Dog.new("小白")

# 執行物件行為
dog.run()
dog.eat("meat")

套件

之前介紹計算機時,有提到說計算機是有無數小開關組成。一些小開關組合成元件,元件再組成更大的原件,一層一層疊加上去,最後才會組成電腦。程式也是相同的道理,我們可以自己從最基本的程式碼開始,寫出一些程式邏輯,把一些相關的程式邏輯包裝成 class、module。更方便的是,我們甚至不需要每次都從頭開始自己寫程式。許多人會將他們寫的程式碼公開、製作成套件,而我們只需要使用套件管理器 gem 就能「安裝」套件,再引入套件就能使用別人已經寫好的功能,不需要自己再重新造輪子。

# 安裝網頁框架 rails
gem install rails
# 安裝資料庫 API
gem install mysql2
# 引入套件
require "mysql2"
# 使用套件
client = Mysql2::Client.new(:host => "localhost", :username => "root", :database => "db", :password => "password")

上一篇
Day 9 - Ruby 基本語法
下一篇
Day 11 - 抽象化
系列文
電腦、網路大解密 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言